标签: MySQL
1.1 SQL语句执行流程 先通过连接器校验权限 利用分析器进行SQL语句的词法分析和语法饭呢西,构建解析树 使用优化器选择合适的索引和表连接顺序,最终选择一个最佳的执行计划 利用执行器,调用引擎层查询数据,返回结果集中给客户端 1.2 MYSQL的存储引擎 InnoDB:是mysql默认的存储引擎,支持事务,表级锁和力度更小的行级锁,具有事务提交,回滚和数据崩溃恢复的功能 changebuffer:是Innodb存储引擎中的一个机制,用于暂存对二级索引的插入和更新操作的变更,而不立即去执行,当合适条件时,再写入到二级索引中, changebuffer:提高写入性能,减少对磁盘的频繁写入,批量操作 MyISAM:是之前Mysql的默认引擎,不支持事务和行级锁,支持表级锁,锁的粒度较大,更新性能较差,更适合读多写少的场景 Memory:相较于InnoDB和MyISAM,Memory是存在内存中的,速度更快,但是不具备持久化能力,适合临时存储 1.3 数据排序 1.3.1索引排序 1.3.1.1 索引的数据结构: B+树(又可分为聚簇索引和非聚簇索引): B+树(所有实际数据(值))都存在叶子节点,所有叶子节点又通过链表连接内部节点不存储数据,用于存储指向子节点的指针和索引信息(关键字(它们通常对应于数据库表中某些字段的值))
定义:聚簇索引是一种将表中的数据行按索引的顺序存储的索引。数据的物理存储顺序与索引顺序相同。
特点:
每个表只能有一个聚簇索引,因为数据只能按一种顺序存放。 主要用于主键(Primary Key)。 查询速度快,因为可以直接访问存储的数据。 例子:在一个员工表中,使用员工ID作为聚簇索引,员工记录将按照员工ID的顺序存储。
定义:非聚簇索引是一种将索引结构与表中的数据分开的索引。索引存储的是指向数据行的指针,而不是数据本身。
特点:
一个表可以有多个非聚簇索引,用于不同的列。 查询时需要先查找非聚簇索引,再通过指针找到实际的数据,速度相对较慢。 例子:在同一个员工表中,如果为姓氏创建非聚簇索引,索引将存储姓氏的值和对应员工ID的指针。
哈希,倒排,R-树
1.3.1.2联合索引 联合索引(Composite Index)是数据库中的一种索引类型,它由多个列组成。与单列索引不同,联合索引可以提高对多个列的查询性能,特别是在涉及到这些列的组合条件时。
特点 由多个列组成:联合索引可以包含两个或更多的列,这使得它适用于复杂查询。 顺序敏感:联合索引中列的顺序非常重要。在创建索引时,最左边的列会影响索引的使用方式。 提高查询性能:联合索引可以加速对涉及多个列的查询,例如,使用WHERE条件的查询、ORDER BY排序等。 1.3.1.2.1 最左前缀匹配原则 1.3.1.2.2 覆盖索引 1.3.1.2.3 索引下推 应用在联合索引上
1.3.2 文件排序 sort_buffer
目录
最新文章
Leetcode刷题心得
哈希 字母异位词
先将字符数组排序把异位词处理成相同格式,方便分类 getOrDefault(key,new class)方法,当集合中存在相应键值对,则取出相应的值,若没有,则创建新的键值对并返回相应的值
class Solution { public List<List<String>> groupAnagrams(String[] strs) { Map<String,List<String>> reflect=new HashMap<>(); boolean contain =false; for(String str:strs){ char[] array=str.toCharArray(); Arrays.sort(array); String key=new String(array); List<String> list=reflect.getOrDefault(key,new ArrayList<String>()); list.add(str); reflect.put(key,list); } return new ArrayList<List<String>>(reflect.values()); } } 双指针 盛最多水的容器
设计两个指针指向数组两端,移动较小的那个元素,因为水桶盛水量取决于较小的那一块,每移动一次就舍弃一个元素,因为当前计算结果就是当前以此元素为边的最大容量(不算舍弃过的元素(并不是真的舍弃,只是后续不再使用))
class Solution { public int maxArea(int[] height) { int length=height.
2024-7-17
MySQL
1.1 SQL语句执行流程 先通过连接器校验权限 利用分析器进行SQL语句的词法分析和语法饭呢西,构建解析树 使用优化器选择合适的索引和表连接顺序,最终选择一个最佳的执行计划 利用执行器,调用引擎层查询数据,返回结果集中给客户端 1.2 MYSQL的存储引擎 InnoDB:是mysql默认的存储引擎,支持事务,表级锁和力度更小的行级锁,具有事务提交,回滚和数据崩溃恢复的功能 changebuffer:是Innodb存储引擎中的一个机制,用于暂存对二级索引的插入和更新操作的变更,而不立即去执行,当合适条件时,再写入到二级索引中, changebuffer:提高写入性能,减少对磁盘的频繁写入,批量操作 MyISAM:是之前Mysql的默认引擎,不支持事务和行级锁,支持表级锁,锁的粒度较大,更新性能较差,更适合读多写少的场景 Memory:相较于InnoDB和MyISAM,Memory是存在内存中的,速度更快,但是不具备持久化能力,适合临时存储 1.3 数据排序 1.3.1索引排序 1.3.1.1 索引的数据结构: B+树(又可分为聚簇索引和非聚簇索引): B+树(所有实际数据(值))都存在叶子节点,所有叶子节点又通过链表连接内部节点不存储数据,用于存储指向子节点的指针和索引信息(关键字(它们通常对应于数据库表中某些字段的值))
定义:聚簇索引是一种将表中的数据行按索引的顺序存储的索引。数据的物理存储顺序与索引顺序相同。
特点:
每个表只能有一个聚簇索引,因为数据只能按一种顺序存放。 主要用于主键(Primary Key)。 查询速度快,因为可以直接访问存储的数据。 例子:在一个员工表中,使用员工ID作为聚簇索引,员工记录将按照员工ID的顺序存储。
定义:非聚簇索引是一种将索引结构与表中的数据分开的索引。索引存储的是指向数据行的指针,而不是数据本身。
特点:
一个表可以有多个非聚簇索引,用于不同的列。 查询时需要先查找非聚簇索引,再通过指针找到实际的数据,速度相对较慢。 例子:在同一个员工表中,如果为姓氏创建非聚簇索引,索引将存储姓氏的值和对应员工ID的指针。
哈希,倒排,R-树
1.3.1.2联合索引 联合索引(Composite Index)是数据库中的一种索引类型,它由多个列组成。与单列索引不同,联合索引可以提高对多个列的查询性能,特别是在涉及到这些列的组合条件时。
特点 由多个列组成:联合索引可以包含两个或更多的列,这使得它适用于复杂查询。 顺序敏感:联合索引中列的顺序非常重要。在创建索引时,最左边的列会影响索引的使用方式。 提高查询性能:联合索引可以加速对涉及多个列的查询,例如,使用WHERE条件的查询、ORDER BY排序等。 1.3.1.2.1 最左前缀匹配原则 1.3.1.2.2 覆盖索引 1.3.1.2.3 索引下推 应用在联合索引上
1.3.2 文件排序 sort_buffer
2024-7-17
Redis
2.1 Redis的应用场景 缓存:用作缓存层,减少数据库负载,提高数据读取速度 实时系统:redis支持快速的数据写入和读取,非常适合实时分析 消息队列:利用Redis的list和pub/sub,可以实现轻量级的消息队列 分布式锁:Redis可以用作分布式锁的实现,确保在分布式系统中资源的安全访问,避免竟态条件 计数器:Redis的原子性操作非常适合用作计数器 2.2 内存存储 2.2.1 redis为什么这么快 reids将数据存储在内存中,提供那个快速的读写速度,相比传统的磁盘数据库,内存访问速度快很多 redis使用单线程事件驱动模型结合I/O多路复用,提高了并发效率(6.0引入多线程:随着数据规模的增长,请求量的增加,redis的执行瓶颈主要在于网络I/O,引入多线程处理可以提高网络I/O的处理效率,减少阻塞) 提供了多种高效数据结构 2.2.2 内存淘汰机制 redis的内存淘汰策略一共由8种
不淘汰数据(默认): noeviction:当运行内存超过最大设置内存的时候,不会淘汰数据,而是直接返回报错禁止写入 设置了过期事件的数据淘汰 volatile_random:随机淘汰掉设置了过期时间的key volatile-ttl:优先淘汰掉较早过期的key volatile-lfu(3.0之前默认策略):淘汰掉所有设置了过期时间的,然后醉酒未使用的key volatile-lfu(4.0后新增):与上面类似,淘汰掉最少使用的key 所有数据的数据淘汰: allkeys-random:随机淘汰掉任意的key allkeys-lru:淘汰掉缓存中最久没有使用的key allkeys-lfu(4.0后新增):淘汰掉缓存中最少使用的key 2.2.3 过期删除机制 定期删除(每隔一段时间(默认100毫秒)随机检查一定数量的键,如果发现过期键则删除) 惰性删除:只有查询到相关数据才执行检查和删除操作,容易造成内存泄漏 2.2.4 内存碎片化 redis的内存碎片化是指内存使用中出现小块空间被闲置,无法被有效利用
redis默认使用jemalloc作为内存分配器,它是按照固定大小来分配内存的 INFO memory:可以通过INFO memory来查看内存碎片率(mem_fragmentation_ratio) # Memory used_memory:1000000 ## 实际申请的内存空间 used_memory_human:977.54K used_memory_rss:1200000 ##表示实际占用的物理内存空间(含内存碎片) used_memory_rss_human:1.14M mem_fragmentation_ratio:1.20 ratio大于1证明存在内存碎片(过大需要清理),小于一说明已经使用swap用上磁盘空间了。
2024-7-17
心理学与生活
感知与记忆 颜色 *超越视觉 颜色不仅仅是我们对光波的一种感知,更是一种视觉经验 视网膜上对颜色识别起作用的细胞叫视锥细胞
知觉 *超越理解 知觉分为觉察、分辨、确定 知觉特性: 选择性(selectivity) 解释性(comprehension) 整体性(integrality) 恒常性(permanent)
错觉 *超越事实 外界纷繁的刺激,我们丰富的生活,都不断的帮助我们建立一个更好的视觉系统,让它发挥更好的作用 我们视觉系统的建立,伴随着大量的经验堆叠,以及视觉神经元在此过程中建立的联系 我们常说 耳听为虚,眼见为实,但实际上,眼见也未必为实
记忆 *给我一杯忘情水 记忆分为 外显记忆(explicit memory): 内隐记忆(implicit memory):不需要意志控制,不需要意志努力
陈述性记忆(declarative memory):一种依靠语言描述来进行的记忆 程序性记忆(procedural memory):一种关于怎么做事情的过程、步骤等具体操作的记忆
情景记忆(episodic memory):一种对于过去经验中时间、地点、过程等的记忆 语义记忆(semantic memory):一种对抽象符号的记忆
时间
感觉记忆(sensory memory):0.5~4秒 短时记忆(short-term memory):5秒到1分 长时记忆(long-term memory):1分钟以上
最容易遗忘的记忆
语义记忆 外显记忆 陈述性记忆
难以遗忘的记忆
情景记忆 程序性记忆 内隐记忆
重构 *那些不真实的回忆 记忆重构(memory reconstruction) 记忆的存储过程是一个动态过程,在这个过程中一些已经有的经验会发生变化 人们会利用概括、归类等方式来重构信息 重构过程中,信息变得更加简单,不重要的细节完全被忽略,,突出和强调哪些重要的细节,这个故事就变得更加合理、符合背景和常识
2024-7-17